package cn.springsoter.core.sms.utils;

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import lombok.extern.slf4j.Slf4j;

/**
 * 手机号工具类
 * @author dws
 */
@Slf4j
public class PhoneUtil {
    private static final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

    /**
     * 校验是否为手机号
     * 为 {@code null} 时返回 {@code false}
     * @param phone 待校验字符
     * @return  {@code true}表示手机号，{@code false}表示非手机号
     */
    public static boolean isPhone(String phone) {
        if(phone == null) {
            return false;
        }
        Phonenumber.PhoneNumber phoneNumber = getPhoneNumber(phone);
        return phoneNumber!=null && phoneNumberUtil.isValidNumber(phoneNumber);
    }

    /**
     * 根据手机号获取PhoneNumber对象
     * 目前只支持中国号码
     * @param phone		手机号[可以带区号]，比如：+8613666668888
     */
    public static Phonenumber.PhoneNumber getPhoneNumber(String phone) {
        try {
            // 国家代码，默认是CN，具体参考：https://www.iso.org/obp/ui/#search
            return phoneNumberUtil.parse(phone, "CN");
        } catch (NumberParseException e) {
            log.error("", e);
        }
        return null;
    }
}
